There are two well-known models for exchanging data between a plurality of computers connected together over a network. The first model is known as the “client/server model”, in which a client computer (i.e., a client) sends a request for data to a server computer (i.e., a server) and waits for a response. Such a server typically has a relatively large bandwidth, processing power and storage capacity and is responsible for indexing, locating, retrieving, storing, caching and securing data. The server extracts the data from a relational database, for example, and, transmits the requested data to the client in response to a client request. The server also ensures data integrity and enforces any access policy associated with the requested data.
The server is usually maintained by a “data-publisher”, which is configured to “publish” the data. Such publication may include extracting data, building documents to a size based on a request, building tables of the data with user-specified or request-driven ruling, borders, shading, colours, etc, automatic numbering of pages, adjustment of binding margins and table sizes, and formatting of numeric data, for example.
In contrast to servers, clients typically have relatively smaller bandwidth, processing power and storage capacity, and incorporate very simple and limited logic. The primary responsibility of a client is to initiate and complete “transactions” with the server. As such, clients are pure consumers of data published by the server. Users who wish to publish data must upload their data to a server.
The other well-known model for exchanging data between a plurality of computers connected together over a network is known as the “peer-to-peer model”, where the term peer refers to each of the computers connected together over the network. The peer-to-peer model is a fully distributed and decentralised model. The peers connected to a network are considered to be equal and there are no peers with special administrative roles. The peers are organised in a flat (i.e. non-hierarchical) structure and connections are formed in an ad-hoc manner. Any peer can “publish” data to, and “consume” data from, any other peer. Such peers are considerably more complex than the clients discussed above and often come in a variety of hardware and software configurations.
Many applications have been developed in order to allow documents to be shared across a network on a computer system implementing the peer-to-peer model. Such applications typically support document versioning (i.e., the creation of different versions of a document) and the storage of such documents so that the different versions representing drafts in the evolution of the document can be retrieved at a later time. This allows a number of different users to make collaborative changes to a document, where the changes can be subsequently merged to produce the final document.
As an example, one application known as the “Concurrent Versions System (CVS)™” supports the merging of collaborative changes to text documents, where these changes comprise the addition, deletion, and modification of lines of ASCII characters. The CVS software typically implements an archive on a central server to which all documents must be compared. Conflicting versions of a document can be merged. However, the result of such merging is the concatenating of pieces of text data from one and another version of a document, without any regard to the semantics of such data.
The CVS software application also allows for the protection of documents, where a user can prevent other users from editing a document while he/she works on the document. However, such protection slows down any collaborative work on a document considerably.
Some software applications (e.g. the Gnutella™ and the FreeNet™ application) allow for the sharing of files between peers without any centralised facilities requiring a server. However, these software applications do not support any kind of collaborative editing.
Other software applications (e.g. the pStore™ and the Chord™ application) allow for data backup and versioning without a central server. For example, the Chord™ software application provides support for distributed data backup, whilst the pStore™ software application implements a versioning system on top of the Chord™ software applications. However, the pStore™ software application does not support distributed versioning (i.e., the creation of different versions of a document on different computers connected to a network) and does not consider the semantics of the data to merge different versions.
A further software application known as the Microsoft™ NetMeeting™ software application, supports a virtual process known as “white-boarding”. White-boarding enables multiple people to collaborate on the creation of diagrams and the annotation thereof. However, the Microsoft™ NetMeeting™ software application does not support versioning of the diagrams and associated annotation or the layout of digital images.
Accordingly, none of the above software applications support distributed versioning of documents, other than that provided by the treatment of data as strings of characters that can be inserted and removed. Further, none of the above software applications support collaborative layout editing of a document without a master copy of the document or a central server and without the locking of a document or any part thereof.
Thus, a need clearly exists for an improved method of editing a document, which allows distributed versioning and which allows the merging of multiple versions of a document.